home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / VDIOUTPU.D < prev    next >
Encoding:
Modula Definition  |  1990-11-03  |  11.4 KB  |  283 lines

  1. DEFINITION MODULE VDIOutputs;
  2.  
  3.  
  4. (*  Megamax Modula-2 GEM-Library :  Die VDI Ausgabefunktionen
  5.  *
  6.  *  Autor: Manuel Chakravarty           Erstellt :  31.10.87
  7.  *
  8.  *  Version   2.2     V#0015
  9.  *)
  10.  
  11.  
  12. (*      Dieses Modul enthält die Ausgaberoutinen des VDI. Darunter fallen
  13.  *      zehn besonders auf, dies sind die GDP (Generalized Drawing Primi-
  14.  *      tives), was soviel wie 'Allgemeine Zeichengrundfunktionen' heißt.
  15.  *      Ob diese Funktionen auf dem jeweiligen Gerät vorhanden sind, kann
  16.  *      aus den von 'GEMEnv.DeviceParameter' gelieferten Werten ersehen
  17.  *      werden.
  18.  *)
  19.  
  20.  
  21. FROM GrafBase   IMPORT Point, Rectangle, WritingMode;
  22.  
  23. FROM GEMEnv     IMPORT DeviceHandle;
  24.  
  25.  
  26. (*  HINWEIS  zu den folgenden 3 Routinen:
  27.  *           Die maximale Anzahl der Punkte, die bei einem Aufruf im
  28.  *           jeweiligen Open Array-Parameter angegeben werden kann,
  29.  *           kann mit 'GEMEnv.MaxPoints' erfragt werden.
  30.  *)
  31.  
  32. PROCEDURE PolyLine (    handle : DeviceHandle;
  33.                     REF pts    : ARRAY OF Point;
  34.                         noLines: CARDINAL);
  35.  
  36.         (*  Zeichnet einen Linienzug.
  37.          *
  38.          *  Die Stützpunkte werden in 'pts' übergeben und 'noLines' ent-
  39.          *  hält die Anzahl der Linien. Ist 'noLines = 0', so wird das
  40.          *  gesamte 'pts'-Array ausgewertet.
  41.          *
  42.          *  Achtung: Das VDI läßt nur eine begrenzte Anzahl Punkte zu!
  43.          *  Die Anzahl ist TOS-abhängig und kann über 'GEMEnv.MaxPoints ()'
  44.          *  ermittelt werden.
  45.          *
  46.          *  Es werden die mit 'VDIAttributes' gesetzten Linienattribute
  47.          *  ausgewertet.
  48.          *)
  49.  
  50. PROCEDURE PolyMarker (    handle   : DeviceHandle;
  51.                       REF marks    : ARRAY OF Point;
  52.                           noMarks  : CARDINAL);
  53.                      
  54.         (*  Diese Funktion zeichnet im Gegensatz zur vorherigen nicht den
  55.          *  vollständigen Linienzug, sondern nur dessen Eckpunkte. Das Aus-
  56.          *  sehen dieser Punkte wird mit den Makierungsattributen bestimmt.
  57.          *  Die Bedeutung von 'noMarks' entspricht der von 'noLines' bei
  58.          *  'PolyLine'.
  59.          *
  60.          *  Achtung: Das VDI läßt nur eine begrenzte Anzahl Punkte zu!
  61.          *  Die Anzahl ist TOS-abhängig und kann über 'GEMEnv.MaxPoints ()'
  62.          *  ermittelt werden.
  63.          *)
  64.          
  65. PROCEDURE Polygon (    handle : DeviceHandle;
  66.                    REF pts    : ARRAY OF Point;
  67.                        noEdges: CARDINAL);
  68.  
  69.         (*  Hier wird nicht einfach ein Polygonzug wie bei 'PolyLine' ge-
  70.          *  zeichnet, sondern die beschriebene Innenfläche gefüllt, dabei
  71.          *  werden die aktuellen Füllattribute berücksichtigt. Zur Aufgabe
  72.          *  von 'noEdges', siehe 'noLines' bei 'PolyLine'.
  73.          *
  74.          *  Achtung: Das VDI läßt nur eine begrenzte Anzahl Punkte zu!
  75.          *  Die Anzahl ist TOS-abhängig und kann über 'GEMEnv.MaxPoints ()'
  76.          *  ermittelt werden.
  77.          *)
  78.  
  79.  
  80. PROCEDURE Line (handle: DeviceHandle; p, q: Point);
  81.  
  82.         (*  Dies ist lediglich ein vereinfachter Aufruf von 'PolyLine'.
  83.          *  Es wird eine Linie von 'p' nach 'q' gezogen.
  84.          *)
  85.         
  86. PROCEDURE Mark (handle: DeviceHandle; p: Point);
  87.  
  88.         (*  Diese Routine führt ein 'PolyMarker'-Aufruf durch, bei dem
  89.          *  eine einzelne Makierung auf den Punkt 'p' gesetzt wird.
  90.          *)
  91.  
  92. PROCEDURE GrafText (    handle: DeviceHandle;
  93.                         start : Point;
  94.                     REF text  : ARRAY OF CHAR);
  95.  
  96.         (*  Hiermit wird ein Text auf dem Grafikbildschirm ausgegeben.
  97.          *
  98.          * 'text'       -- der auszugebende Text
  99.          * 'start'      -- hier beginnt die Textausgabe
  100.          *
  101.          *  Die Textausgabe wird mit den eingestellten Textattributen
  102.          *  vorgenommen. Standardmäßig wird der Text am linken Rand
  103.          *  und der Grundlinie (base line) justiert, dies ist bei der
  104.          *  Wahl von 'start' zu beachten.
  105.          *  Die Lage der Grundlinie kann mit 'VDIInquires.GetFaceInfo' er-
  106.          *  fragt werden.
  107.          *)
  108.          
  109. PROCEDURE CellArray (    handle                      : DeviceHandle;
  110.                          frame                       : Rectangle;
  111.                          rowLength, usedElems, noRows: CARDINAL;
  112.                          mode                        : WritingMode;
  113.                      REF colArray                    : ARRAY OF CARDINAL);
  114.  
  115.          (*  Diese Routine teilt eine Bildschirmbereich in einzelne Felder,
  116.           *  die unterschiedlich gefärbt werden.
  117.           *  'frame'      -- der Bildschirmbereich
  118.           *  'rowlength'  -- die Anzahl der Spalten pro Zeile
  119.           *  'noRows'     -- die Anzahl der Zeilen
  120.           *  'mode'       -- gibt den Schreibmodus
  121.           *  'colArray'   -- enthält die einzelnen Farben
  122.           *
  123.           *  HINWEIS: Diese Routine ist im aktuellen TOS nicht implementiert.
  124.           *
  125.           *           Außerdem ist sie in der aktuellen Modulversion noch
  126.           *           nicht implementiert.
  127.           *)
  128.         
  129. PROCEDURE ContourFill (handle  : DeviceHandle;
  130.                        start   : Point;
  131.                        tagColor: CARDINAL;
  132.                        useTag  : BOOLEAN);
  133.                       
  134.         (*  Diese Procedur füllt einen beliebig geformten Bereich,
  135.          *  der entweder durch eine Randfarbe bestimmt wird oder des-
  136.          *  sen Form durch die Verteilung der Innenfarbe definiert ist
  137.          *
  138.          *  'tagColor'  -- die Randfarbe
  139.          *  'useTag'    -- '=TRUE': Bereich wird durch Randfarbe bestimmt
  140.          *                 '=FALSE': ..wird durch die Verteilung der In-
  141.          *                 nenfarbe bestimmt
  142.          *  'start'     -- Punkt in Inneren des zu Füllenden Bereichs.
  143.          *                 Die Farbe dieses Punktes legt die Innenfar-
  144.          *                 be fest.
  145.          *)
  146.         
  147. PROCEDURE FillRectangle (handle: DeviceHandle; frame: Rectangle);
  148.  
  149.         (*  Es wird ein Rechteck mit den durch 'frame' bestimmten Aus-
  150.          *  maßen gezeichnet. Das Aussehen wird durch die Füllattribute
  151.          *  festgelegt.
  152.          *)
  153.  
  154.         
  155.                 (*  Generalized Drawing Primitives  *)
  156.                 (*  ==============================  *)
  157.                 
  158. (*  Alle Winkelangaben, die in einem Teil der folgenden zehn Routinen vor-
  159.  *  kommen, müssen in 1/10 Grad gemacht werden. Dabei gilt:
  160.  *
  161.  *                              900
  162.  *                               |
  163.  *                               |
  164.  *                      1800 ----+---- 0
  165.  *                               |
  166.  *                               |
  167.  *                              2700
  168.  
  169.  *  Bei allen gefüllten Objekten werden die Füllattribute Fülltyp, Füll-
  170.  *  index, Füllfarbe und Begrenzungslinie ausgewertet.
  171.  *
  172.  *  Bei allen linierten Objekten (z.B. Arc) werden die Linienattribute
  173.  *  Linienstärke, Linientyp, Linienfarbe und das Aussehen der Linienenden
  174.  *  berücksichtigt.
  175.  *
  176.  *  Bei der Textausgabe werden die Textattribute ausgewertet, dies sind
  177.  *  Textgröße, Winkel des Textes, Textfarbe, Texteffekte und die Textaus-
  178.  *  richtung.
  179.  *
  180.  *  Zusätzlich wird bei jeder Routine noch der Zeichenmodus beachtet.
  181.  *
  182.  *  Jedes oben aufgeführte Attribut kann mit Routinen des Moduls
  183.  *  'VDIAttributes' eingestellt werden.
  184.  *)
  185.  
  186.  
  187. PROCEDURE Bar (handle: DeviceHandle; frame: Rectangle);
  188.  
  189.         (*  Diese Routine zeichnet einen ausgefüllten Balken. Es werden
  190.          *  alle Füllattribute berücksichtigt.
  191.          *)
  192.  
  193. PROCEDURE Arc (handle          : DeviceHandle;
  194.                middle          : Point;
  195.                radius, beg, end: CARDINAL);
  196.  
  197.         (*  Damit zeichnet man einen Kreisbogen, dessen Mittelpunkt
  198.          *  durch 'middle' und dessen Radius durch 'radius' festge-
  199.          *  legt wird. Der Bogen beginnt bei 'beg' (Winkelangabe)
  200.          *  und endet bei 'end' (ebenfalls in Grad).
  201.          *)
  202.         
  203. PROCEDURE Pie (handle           : DeviceHandle;
  204.                 middle          : Point;
  205.                 radius, beg, end: CARDINAL);
  206.  
  207.         (*  Diese Routine arbeitet genauso wie 'Arc', nur daß statt des
  208.          *  Kreisbogens ein ganzer Kreisausschnitt, gefüllt, gezeichnet
  209.          *  wird. Kann z.B. in Tortengrafiken verwendet werden.
  210.          *)
  211.         
  212. PROCEDURE Circle (handle: DeviceHandle;
  213.                   middle: Point;
  214.                   radius: CARDINAL);
  215.  
  216.         (*  Diese Prozedur zeichnet nun einen vollständig gefüllten
  217.          *  Kreis, mit 'middle' als Mittelpunkt und 'radius' als Radius.
  218.          *)
  219.         
  220. PROCEDURE Ellipse (handle          : DeviceHandle;
  221.                    middle          : Point;
  222.                    xradius, yradius: CARDINAL);
  223.  
  224.         (*  Zeichnet eine gefüllte Ellipse, deren Mittelpunkt 'middle' ist.
  225.          *  'xradius' gibt die Länge der horizontalen und 'yradius' die der
  226.          *  vertikalen Halbachse an.
  227.          *)
  228.         
  229. PROCEDURE ElliptArc (handle                    : DeviceHandle;
  230.                      middle                    : Point;
  231.                      xradius, yradius, beg, end: CARDINAL);
  232.             
  233.         (*  Es wird ein elliptischer Bogen, von 'beg' bis 'end' (Winkel-
  234.          *  angabe), gezeichnet. 'middle', 'xradius' und 'yradius' geben
  235.          *  den Mittelpunkt bzw. die horizontale und vertikale Halbachse
  236.          *  der zu Grunde liegenden Ellipse an.
  237.          *)
  238.         
  239. PROCEDURE ElliptPie (handle                    : DeviceHandle;
  240.                      middle                    : Point;
  241.                      xradius, yradius, beg, end: CARDINAL);
  242.                      
  243.         (*  Entspricht 'ElliptArc', nur wird statt des Bogens ein ge-
  244.          *  füllte Ellipsenausschnitt gezeichnet.
  245.          *)
  246.         
  247. PROCEDURE RoundRect (handle: DeviceHandle; frame: Rectangle);
  248.  
  249.         (*  Damit kann man ein Rechteck zeichnen, dessen Ecken abgerundet
  250.          *  sind. Die Ausmaße werden durch 'frame' bestimmt.
  251.          *)
  252.         
  253. PROCEDURE FillRoundRect (handle: DeviceHandle; frame: Rectangle);
  254.  
  255.         (*  Entspricht 'RoundRect', nur wird das Innere des Rechtecks,
  256.          *  entsprechend der aktuellen Füllattribute gefüllt.
  257.          *)
  258.         
  259. PROCEDURE JustifiedText (    handle        : DeviceHandle;
  260.                              start         : Point;
  261.                              length        : CARDINAL;
  262.                              wSpace, cSpace: BOOLEAN;
  263.                          REF str           : ARRAY OF CHAR);
  264.                          
  265.         (*  Diese Routine gibt eine formatierte Textzeile aus.
  266.          *
  267.          *  'str'
  268.          *  'start'     -- bestimmt, wo der Text erscheint. Bei der
  269.          *                 Festlegung muß auf die aktuelle Textaus-
  270.          *                 richtung geachtet werden. Standardmäßig ist
  271.          *                 sie so eingestellt, daß 'start' das linke Ende
  272.          *                 der Grundlinie (base line) angibt.
  273.          *  'length'    -- gibt an, wie breit (in Pixel) er sein soll
  274.          *  'wSpace' bzw.
  275.          *  'cSpace'    -- geben an, ob eine Dehnung in Wort- bzw.
  276.          *                 Zeichenzwischenräumen erlaubt ist.Ist sie
  277.          *                 erlaubt, so versucht die Routine den Text so
  278.          *                 zu dehnen, daß er die in 'length' angegebene
  279.          *                 Breite hat.
  280.          *
  281.          *)
  282.  
  283. END VDIOutputs.